package br.com.ds3.rule;

import java.io.File;
import java.math.BigDecimal;
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.jrimum.bopepo.BancosSuportados;
import org.jrimum.bopepo.Boleto;
import org.jrimum.bopepo.view.BoletoViewer;
import org.jrimum.domkee.financeiro.banco.febraban.Agencia;
import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
import org.jrimum.domkee.financeiro.banco.febraban.Cedente;
import org.jrimum.domkee.financeiro.banco.febraban.ContaBancaria;
import org.jrimum.domkee.financeiro.banco.febraban.NumeroDaConta;
import org.jrimum.domkee.financeiro.banco.febraban.Sacado;
import org.jrimum.domkee.financeiro.banco.febraban.TipoDeTitulo;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo;
import org.jrimum.domkee.financeiro.banco.febraban.Titulo.EnumAceite;

import br.com.caelum.vraptor.Resource;
import br.com.ds3.model.Inscricao;

@Resource
public class BoletoRule {
	public static File geraBoletoInscricao(Inscricao inscricao) {
		Cedente cedente = new Cedente("NEW EVENT LTDA", "73.956.354/0001-88");
		
		Sacado sacado = new Sacado(inscricao.getParticipante().getNome(), inscricao.getParticipante().getCpf());
		
		ContaBancaria contaBancaria = new ContaBancaria(BancosSuportados.BANCO_BRADESCO.create());
		contaBancaria.setNumeroDaConta(new NumeroDaConta(123456, "0"));
		contaBancaria.setCarteira(new Carteira(30));
		contaBancaria.setAgencia(new Agencia(1234, "1"));
		
		Titulo titulo = new Titulo(contaBancaria, sacado, cedente);
		titulo.setNumeroDoDocumento(inscricao.getId().toString());
		titulo.setNossoNumero(StringUtils.leftPad(inscricao.getId().toString(), 11, "0"));
		titulo.setDigitoDoNossoNumero("6");
		titulo.setValor(new BigDecimal(inscricao.getAtividade().getValorInscricao()));
		titulo.setDataDoDocumento(new Date());
		titulo.setDataDoVencimento(inscricao.getAtividade().getData());
		titulo.setTipoDeDocumento(TipoDeTitulo.DM_DUPLICATA_MERCANTIL);
		titulo.setAceite(EnumAceite.A);
		titulo.setDesconto(BigDecimal.ZERO);
		titulo.setDeducao(BigDecimal.ZERO);
		titulo.setMora(BigDecimal.ZERO);
		titulo.setAcrecimo(BigDecimal.ZERO);
		titulo.setValorCobrado(new BigDecimal(inscricao.getAtividade().getValorInscricao()));
		
		Boleto boleto = new Boleto(titulo);        
		boleto.setLocalPagamento("Pagável preferencialmente no Bradesco.");
		boleto.setInstrucao1("Não receber após vencimento");
		
		BoletoViewer boletoViewer = new BoletoViewer(boleto);

		String filename = "boleto" + inscricao.getId().toString() + ".pdf";		
		File file = boletoViewer.getPdfAsFile(filename);
		
		return file;
	}
}
